<template>
    <!-- 表单提交事件绑定submitForm函数，表单验证失败事件绑定onFailed函数，ref绑定ruleFormRef -->
    <van-form @submit="submitForm" @failed="onFailed" ref="ruleFormRef" :model="form">
        <!-- 账号输入框 -->
        <van-cell-group>
            <van-field
                v-model="form.username"
                label="账号："
                placeholder="请输入账号"
                clearable
                name="username"
                :rules="usernameRules" >
            </van-field>
        </van-cell-group>
        <!-- 密码输入框 -->
        <van-cell-group>
            <van-field
                v-model="form.password"
                label="密码："
                placeholder="请输入密码"
                name="password"
                clearable
                type="password"
                :rules="passwordRules" >
            </van-field>
        </van-cell-group>
        <!-- 登录按钮 -->
        <van-cell-group>
            <van-button block round type="primary" native-type="submit">登录</van-button>
        </van-cell-group>
    </van-form>
</template>

<script setup>
import { ref, reactive } from 'vue'
import { login, getUser } from '../api'
import useToken from '../stores/token'
import useUser from '../stores/user'
import { useRouter } from 'vue-router'

const { updateToken } = useToken()
const { updateUser } = useUser()
const router = useRouter()
// 定义表单数据
const form = reactive({
    username: 'demo1',
    password: '123456'
})
const ruleFormRef = ref()
// 定义验证规则
const usernameRules = ref([
    { required: true, message: '用户名不能为空' },
    { pattern: /^\w{3,16}$/, message: '用户名长度为 3-16 个字符 ' }
])
const passwordRules = ref([
    { required: true, message: '密码不能为空' },
    { pattern: /^\w{6,24}$/, message: '密码必须为 6-24 位英文字母或数字 ' }
])
// 表单提交函数
const submitForm = async values => { 
    console.log(values)
    const data = await login(values)
    if (data) {
        updateToken(data.token)
        const user = await getUser()
        updateUser ({
            isLogin: true,
            username: user.username,
            avatar: user.avatar
        })
        router.push({ name: 'user' })
    }
}
const onFailed = errorInfo => {
    console.log('failed', errorInfo)
}
</script>

<style lang="less" scoped>
button {
    position: fixed;
    top: 200px;
}
</style>